<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // 拷贝继承  

        // 利用for in 循环遍历对象  
        // 把所有的内容复制到子类的原型上 


        // in 关键字  
        // '字符串' in 对象
        //  结果是布尔类型  

        // 属性在自己身上或者原型上都可以  

        // let obj = {
        //     name:'zhangsan',
        //     age:18
        //     sayHello:()=>{}
        // }

        // console.log('name' in obj);
        // console.log('age' in obj);
        // console.log('height' in obj);

        // hasOwnProperty  跟  in 一样 用来判断 属性是否在对象身上 

        // 语法: 对象.hasOwnProperty('属性名')

        // 返回值: 一个布尔类型  
        // 要求 属性必须在自己身上  在原型上也不行   
        
        // console.log(obj.hasOwnProperty('name'));
        // console.log(obj.hasOwnProperty('age'));
        // console.log(obj.hasOwnProperty('height'));


        // function Person(name,age){
        //     this.name = name;
        //     this.age = age;

        // }

        // Person.prototype.sayHello = function(){
        //     console.log('hello world');
        // }

        // function Student(gender){
        //     this.gender = gender;

        // }

        // // Student的原型 指向 Person的一个实例  
        // Student.prototype = new Person('王五',19)


        // // 实例化一个子类  

        // const s1 = new Student('张三','男');
        

        // console.log('name' in s1); // name 在原型上
        // console.log('age' in s1);// age 在原型上
        // console.log('gender' in s1); // gender 在 s1身上

        // console.log(s1.hasOwnProperty('name'));
        // console.log(s1.hasOwnProperty('age'));
        // console.log(s1.hasOwnProperty('gender'));
        

        // 遍历对象 
        // for in  

        // 拷贝继承  

        // 利用for in 循环遍历父类的实例对象 
        // 把所有的内容复制到子类的原型上 


        // 父类
        function Person(name,age){
            this.name = name;
            this.age = age;

        }

        Person.prototype.sayHello = function(){
            console.log('hello world');
        }

        // 子类 
        function Student(gender,...args){
            this.gender = gender;
            // 创建一个父类的实例 
            const p = new Person(...args);
            for(let k in p){
                // p对象的键   name age sayHello
                Student.prototype[k] = p[k];
            }

        }


        const s1 = new Student('男','张三',18);
        console.log(s1);
        console.log(s1.name);
        console.log(s1.age);
        s1.sayHello()


        const s2 = new Student('女','李四',28);
        console.log(s2);
        console.log(s2.name);
        console.log(s2.age);
        s2.sayHello()

    </script>
</body>
</html>